using Newtonsoft.Json;
using System.Collections.Generic;
using System.IO;

namespace Ruhua
{
    /// <summary>
    /// 配置文件
    /// </summary>
    public class Config
    {
        /// <summary>
        /// 名称配置列表
        /// </summary>
        public List<NameObject> datas = new();

        /// <summary>
        /// npc id列表（仅代码内部匹配用）
        /// </summary>
        [JsonIgnore]
        public List<int> ids = new();


        /// <summary>
        /// 加载配置文件
        /// </summary>
        public static Config Load(string path)
        {
            if (File.Exists(path))
            {
                return JsonConvert.DeserializeObject<Config>(File.ReadAllText(path));
            }
            else
            {
                var c = new Config();
                c.Init();
                File.WriteAllText(path, JsonConvert.SerializeObject(c, Formatting.Indented));
                return c;
            }
        }

        public void Init()
        {
            Add(663, "公主", "如花,昭君,文成,建宁");
            Add(22, "向导", "击倒,史王他哥,有话好好说，别把我仍岩浆,[i:267]");
            Add(453, "骷髅商人", "拾荒者");
            Add(20, "树妖", "五百岁");
            Add(369, "渔夫", "孤儿,阿斗,鱼店之主,[i:5129]");
            Add(19, "军火商", "后羿");
            Add(18, "护士", "嫦娥,扁鹊");
            Add(17, "商人", "理财专家");
            Add(227, "油漆工", "唐伯虎,梵高");
            Add(124, "机械师", "鲁班");
            Add(107, "哥布林工匠", "铂金吞噬者");
            Add(228, "巫医", "大祭司");
            Add(207, "染料商", "马可波罗");
            Add(54, "服装商", "疯帽,[i:1307]");
            Add(353, "发型师", "托尼");
            Add(38, "爆破专家", "万户,孙思邈");
            Add(633, "动物学家", "妲己");
            Add(208, "派对女孩", "小马碧琪");
            Add(550, "酒馆老板", "杜康");
            Add(588, "高尔夫球手", "老虎伍兹");
            Add(108, "巫师", "甘道夫");
            Add(229, "海盗", "杰克·斯帕罗");
            Add(441, "税收官", "石壕吏");
            Add(160, "松露人", "蘑菇,香菇,鸡枞菌,竹荪,松茸,灵芝,猴头菇");
            Add(142, "圣诞老人", "吼吼吼");
            Add(209, "机器侠", "电子人");
            Add(178, "蒸汽朋克人", "草薙素子");
            Add(637, "猫咪", "巴斯特,妙妙,咖啡,狸花");
            Add(638, "狗狗", "旺财,德芙");
            Add(656, "兔兔", "月兔,玉兔");
            Add(37, "老人", "被诅咒的老裁缝");
            Add(368, "旅商", "虚空来客");
            Add(670, "呆瓜史莱姆", "小呆呆");
            Add(678, "冷酷史莱姆", "小歪帽");
            Add(679, "年长史莱姆", "摇摇箱");
            Add(680, "笨拙史莱姆", "小笨蛋");
            Add(681, "唱将史莱姆", "小小");
            Add(682, "粗暴史莱姆", "小跳蚤");
            Add(683, "神秘史莱姆", "小红帽");
            Add(684, "侍卫史莱姆", "侍剑");

            GenIDs();
        }

        /// <summary>
        /// 添加一条数据
        /// </summary>
        /// <param name="_id"></param>
        /// <param name="_comment"></param>
        /// <param name="_name"></param>
        void Add(int _id, string _comment, string _name)
        {
            NameObject obj = new()
            {
                id = _id,
                comment = _comment
            };

            var li = _name.Split(',');
            var flag = false;
            foreach (var n in li)
            {
                if (!string.IsNullOrEmpty(_name))
                {
                    obj.names.Add(n);
                    flag = true;
                }
            }

            if (flag)
            {
                datas.Add(obj);
                ids.Add(_id);
            }
        }

        /// <summary>
        /// 生成id
        /// </summary>
        public void GenIDs()
        {
            for (int i = 0; i < datas.Count; i++)
            {
                foreach (var item in datas[i].names)
                {
                    if (!string.IsNullOrEmpty(item))
                    {
                        ids.Add(datas[i].id);
                        break;
                    }
                }
            }
        }

    }



    public class NameObject
    {
        /// <summary>
        /// NPC ID
        /// </summary>
        public int id = 0;

        /// <summary>
        /// 备注
        /// </summary>
        public string comment = "";

        /// <summary>
        /// 名字列表
        /// </summary>
        public List<string> names = new();
    }

}